/**
 * @description main.ts 全局注入
 */
import {
  createRouter,
  createMemoryHistory,
  createWebHashHistory,
} from "vue-router";
import DemoRounterLayout from "../pages/demo/demo-router/layout/index.vue";
import DemoAllLayout from "../pages/demo/demo-index/index.vue";
import DefaultLayout from "../pages/layout/index.vue";
import demoResources from "../../mock/api/demo/resources";

const routes = [
  {
    path: "/",
    // 默认路由
    redirect: "/login",
  },
  {
    path: "/demo",
    // 填充 App.vue 中的 router-view
    component: DefaultLayout,
    name: "demo",
    // 默认路由
    redirect: "/demo/index",
    children: Array<any>(),
    // children: [
    //   {
    //     path: "/demo/index",
    //     // 综合测试 demo
    //     component: DemoAllLayout,
    //     name: "demoAll",
    //     // 默认路由，自动初始化嵌套 demo-router/layout/index.vue 中的 <router-view></router-view>
    //     redirect: "/demo/home",
    //     children: [
    //       {
    //         path: "/demo/home",
    //         // 代码中根据 name 进行页面跳转，url 中动态切换 path，例如 /#/home
    //         name: "home",
    //         // 填充 demo-router\layout\index.vue 中的 router-view
    //         component: () => import("../pages/demo/demo-router/home/index.vue"),
    //         meta: {
    //           title: "首页",
    //           icon: "",
    //         },
    //       },
    //       {
    //         path: "/demo/about",
    //         name: "about",
    //         // 填充 demo-router\layout\index.vue 中的 router-view
    //         component: () => import("../pages/demo/demo-router/about/index.vue"),
    //         meta: {
    //           title: "关于",
    //           icon: "",
    //         },
    //       },
    //     ],
    //   },
    //   {
    //     path: "/demo/props",
    //     name: "demo-props",
    //     component: () => import("../pages/demo/demo-props/index.vue"),
    //     meta: {
    //       title: "define props",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/emits",
    //     name: "demo-emits",
    //     component: () => import("../pages/demo/demo-emits/index.vue"),
    //     meta: {
    //       title: "demo emits",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/watch",
    //     name: "demo-watch",
    //     component: () => import("../pages/demo/demo-watch/index.vue"),
    //     meta: {
    //       title: "demo watch",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/expose",
    //     name: "demo-expose",
    //     component: () => import("../pages/demo/demo-expose/index.vue"),
    //     meta: {
    //       title: "demo expose",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/store",
    //     name: "demo-store",
    //     component: () => import("../pages/demo/demo-store/index.vue"),
    //     meta: {
    //       title: "demo store",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/slot",
    //     name: "demo-slot",
    //     component: () => import("../pages/demo/demo-slot/index.vue"),
    //     meta: {
    //       title: "demo slot",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/router",
    //     name: "demo-router",
    //     component: () => import("../pages/demo/demo-router/layout/index.vue"),
    //     meta: {
    //       title: "demo router",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/env",
    //     name: "demo-env",
    //     component: () => import("../pages/demo/demo-env/index.vue"),
    //     meta: {
    //       title: "demo env",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/svg",
    //     name: "demo-svg",
    //     component: () => import("../pages/demo/demo-svg/index.vue"),
    //     meta: {
    //       title: "demo svg",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/axios",
    //     name: "demo-axios",
    //     component: () => import("../pages/demo/demo-axios/index.vue"),
    //     meta: {
    //       title: "demo axios",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/table",
    //     name: "demo-table",
    //     component: () => import("../pages/demo/demo-element-table/index.vue"),
    //     meta: {
    //       title: "demo table",
    //       icon: "",
    //     },
    //   },
    //   {
    //     path: "/demo/datagrid",
    //     name: "demo-datagrid",
    //     component: () => import("../pages/demo/demo-datagrid/index.vue"),
    //     meta: {
    //       title: "demo datagrid",
    //       icon: "",
    //     },
    //   },
    // ],
  },
  {
    path: "/admin",
    // 填充 App.vue 中的 router-view
    component: DefaultLayout,
    name: "admin",
    // 默认路由
    redirect: "/admin/account/list",
    children: Array<any>(),
  },
];

routes.forEach((root) => {
  // 处理静态 demo 资源
  if (root.name == "demo") {
    demoResources.forEach((item) => {
      if (item.component.indexOf("demo") == 0) {
        root.children.push({
          path: item.uri,
          name: item.menuItemId,
          component: () => import("../pages/" + item.component),
          meta: {
            title: item.menuItemName,
            resourceId: item.menuItemId,
          },
        });
      }
    });
  }

  if (root.name == "admin") {
    demoResources.forEach((item) => {
      if (item.component.indexOf("admin") == 0) {
        root.children.push({
          path: item.uri,
          name: item.menuItemId,
          component: () => import("../pages/" + item.component),
          meta: {
            title: item.menuItemName,
            resourceId: item.menuItemId,
          },
        });
      }
    });
  }
});

const router = createRouter({
  // url 无变化，刷新回到首页，无法保存当前页地址
  // history: createMemoryHistory(),
  // url 通过 /#/xxxx 方式，刷新可以保留当前页地址
  history: createWebHashHistory(),
  routes,
});

export default router;
